package Evaluateur;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;

//Pour chaque fichier resultat, comparer (5 10 ou 25 premiers resulats) avec le fichier qrel
public class Comparateur {
	private int nombreRequete;
	private String pathFichier;

	public Comparateur(int nombreRequete) {
		this.nombreRequete = nombreRequete;
		this.pathFichier ="/home/louis/Bureau/RI/qrels/qrels/";
	}

	public ArrayList<String> lireFicherResultat(String qrel, String fichierResult){
		ArrayList<String> toReturn =new ArrayList<String>();
		//lecture du fichier texte	
		try{
			InputStream ips=new FileInputStream(this.pathFichier+fichierResult); 
			InputStreamReader ipsr=new InputStreamReader(ips);
			BufferedReader br=new BufferedReader(ipsr);

			//lire fichier
			for(int i = 0; i< this.nombreRequete;i++){
				//pour chaque ligne
				toReturn.add(br.readLine());
			}
			br.close(); 
		}		
		catch (Exception e){
			System.out.println(e.toString());
		}

		return this.nettoyerListe(toReturn);	
	}

	private ArrayList<String> nettoyerListe(ArrayList<String> liste){
		String[] parties;
		ArrayList<String> toReturn = new ArrayList<String>();

		//pour chaque phrase de l'arrayList
		for(String s : liste){
			//separe la phrase en mot
			parties  = s.split(" ");
			toReturn.add(parties[0]);
		}
		return toReturn;
	}


	private float getIntFromLine(String line){
		line = line.replace(",",".");
		String s[] = line.split("\t");
		return (Float.parseFloat(s[1])); 
	}

	private String getDocFromLine(String line){
		String s[] = line.split("\t");
		return s[0]; 
	}

	public int getNombreRequete() {
		return nombreRequete;
	}

	public int  comparer(String qrel, String fichierResult ){

		//lire le fichier resultat et en recuperer les fichier en tete
		ArrayList<String> listePremsFichiers =lireFicherResultat(qrel, fichierResult);

		int compteur=0;

		//lire le fichier qrel
		//lecture du fichier texte	
		try{
			InputStream ips=new FileInputStream(this.pathFichier+qrel); 
			InputStreamReader ipsr=new InputStreamReader(ips);
			BufferedReader br=new BufferedReader(ipsr);
			String ligne;

			//lire fichier
			while((ligne = br.readLine()) !=null){
				for(String s : listePremsFichiers){

					if(getDocFromLine(ligne).equalsIgnoreCase(s)){
						float numero = getIntFromLine(ligne);
						if(numero > 0){
							compteur++;	
						}
					}
				}
			}
			br.close(); 
		}	
		catch (Exception e){
			System.out.println(e.toString());
		}
		return compteur;
	}
}
